package com.demo.java.OD351_400.OD382;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【战场索敌(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146238863
 */
public class OdMain {
    static int M = 1005;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int k = scanner.nextInt();
        scanner.nextLine(); // Consume the newline character
        String[] s = new String[n];

        // 读取地图数据
        for (int i = 0; i < n; i++) {
            s[i] = scanner.nextLine();
        }

        // 计算结果
        int result = countCells(n, m, k, s);
        System.out.println(result);
    }

    // 计算满足条件的区域数量
    static int countCells(int n, int m, int k, String[] s) {
        int[][] vis = new int[M][M];  // 用于标记每个单元格是否已访问
        int mx = 0;  // 记录满足条件的区域数量

        // 遍历所有的单元格
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                // 如果当前单元格是未访问过且不是障碍物，进行DFS搜索
                if (s[i].charAt(j) != '#' && vis[i][j] == 0) {
                    int[] sum = {0};  // 记录区域内的'E'数量
                    dfs(i, j, n, m, s, vis, sum);
                    // 如果区域内'E'数量小于k，则符合条件
                    if (sum[0] < k) {
                        mx++;
                    }
                }
            }
        }

        return mx;
    }

    // 深度优先搜索，遍历区域
    static void dfs(int x, int y, int n, int m, String[] s, int[][] vis, int[] sum) {
        // 边界判断：超出边界、遇到墙或已访问过
        if (x < 0 || x >= n || y < 0 || y >= m || s[x].charAt(y) == '#' || vis[x][y] == 1) {
            return;
        }
        // 如果是 'E'，则计数
        if (s[x].charAt(y) == 'E') {
            sum[0]++;
        }
        // 标记当前单元格已访问
        vis[x][y] = 1;

        // 四个方向进行深度优先搜索
        dfs(x + 1, y, n, m, s, vis, sum);
        dfs(x, y + 1, n, m, s, vis, sum);
        dfs(x - 1, y, n, m, s, vis, sum);
        dfs(x, y - 1, n, m, s, vis, sum);
    }
}